//
//  HctpApi.h
//  HCTP
//
//  Created by Jian Luo on 2022/6/20.
//

#ifndef HctpApi_h
#define HctpApi_h

#ifdef  __cplusplus
extern "C" {
#endif

#include "HctpType.h"
#include "PPCS_API.h"


/// 获取HCTP模块的版本号
S8* hctpGetVersion(void);


/// 设置HCTP模块的log等级，
/// @param level 参数可以为 “DBG”，“INFO”， “WNR”和 “ERR"
S32 hctpSetLogLevel(const S8* level);


/// HCTP模块初始化
/// @param tunnelParam 参数为类似main函数命令行， 如PPCS  initString didString connectMode
/// @返回值  返回HCTP实例的Handle，后续所有接口需要带Handle来访问
U64 hctpInit(const S8* tunnelParam);


/// HCTP模块反初始化
/// @param handle  HCTP的实例Handle
S32 hctpDeinit(U64 handle);


/// HCTP模块连接设备，连接参数在Init中的param中指定， 连接是耗时操作，建议放在后台任务中调用，没有断开的连接，内部会先断开在连接
/// @param handle HCTP的实例Handle
/// @param onSuccess 连接成功回调，返回网络类型
/// @param onFailure 连接失败回调，返回错误吗
S32 hctpConnect(U64 handle , PFOnConnectSuccess onSuccess, PFOnConnectFailure onFailure);


/// HCTP模块断开连接
/// @param handle HCTP的实例Handle
S32 hctpDisconnect(U64 handle);


/// HCTP模块的错误码检查，确认是不是Tunnel异常导致
/// @param errorCode HCTP内部函数和HCTP接口返回值
BOOL isHctpNeedReconnect(S32 errorCode);


/// HCTP 媒体文件下载
/// @param handle HCTP的实例Handle
/// @param pstMediaItem  媒体文件的信息结构体
/// @param context    调用者传入的不透明对象， 回调执行的时候，作为第一个参数传出
/// @param onProgress 文件传输进度回调函数

S32 hctpMediaDownload(U64 handle, TMediaDownload *pstMediaItem, void* context, PFOnProgress onProgress);


/// HCTP 媒体文件上传
/// @param handle HCTP的实例Handle
/// @param pstMediaItem 媒体文件的信息结构体
/// @param context    调用者传入的不透明对象， 回调执行的时候，作为第一个参数传出
/// @param onProgress 文件传输进度回调函数

S32 hctpMediaUpload(U64 handle, TMediaUpload *pstMediaItem, void* context, PFOnProgress onProgress );


/// HTCP文件上传
/// @param handle HCTP的实例Handle
/// @param pstFileItem 文件的信息结构体
/// @param context 调用者传入的不透明对象， 回调执行的时候，作为第一个参数传出
/// @param onProgress 文件传输进度回调函数
S32 hctpFileUpload(U64 handle, TFileUpload *pstFileItem,void* context, PFOnProgress onProgress);


/// HTCP文件下载
/// @param handle HCTP的实例Handle
/// @param pstFileItem 文件的信息结构体
/// @param context 调用者传入的不透明对象， 回调执行的时候，作为第一个参数传出
/// @param onProgress 文件传输进度回调函数
S32 hctpFileDownload(U64 handle, TFileDownload *pstFileItem, void* context, PFOnProgress onProgress);


/// HCTP暂停或停止某个任务
/// @param handle HCTP的实例Handle
/// @param id 传输任务对应的ID ，在传输开始的时候 pstMediaItem中的ID对应
/// @param pause 通知设备服务器，是删除临时文件(pause =0)，还是保留临时文件pause = 1)


/// 停止任务
/// @param handle HCTP的实例Handle
/// @param pause  停止任务的模式   pause:  1  , delete 0;
S32 hctpTransferStopTaskById(U64 handle,S64 id, U32 pause);

S32 hctpGetNetinfo(U64 handle);

S32 hctpGetSInfo(U64 handle,st_PPCS_Session *info);

#ifdef __cplusplus
}
#endif


#endif /* HctpApi_h */
